多虧ccutmis大幫忙地雷安裝完成,明天要處理數字部分。
參考:ccutmis大提供js洗牌函式
原本「maxwd=9」,
改成「mapsize=3」。
因為3x3地圖不是一列可以解決,
而是需要三列資料,
也就是一維陣列轉成二維陣列。
<!-- 建立地圖 -->
var map = document.getElementsByClassName("map");
var wd,mapsize;
mapsize=3;
一開始預設為未知狀態(0),
之後再放入地雷(*)。
<!-- 放置地雷 -->
console.log("0:unknow 1:empty 2:number *:boom")
var boommap=[],randmap=[],boom=[];
var boomi,boomj,boomnum;
boomnum = 2;//地雷數量
// init
//地圖初始化&放置地雷
for(let bi=0; bi<mapsize**2; bi++){
randmap.push(0);
if(bi<boomnum)randmap[bi]="*";//*=地雷
}
//隨機整數
function getRandInt(max){
return Math.floor(Math.random()*max);
}
//隨機地雷位置
for (let numi=mapsize**2-1;numi>0;numi--){
let j = getRandInt(numi+1);
[randmap[numi],randmap[j]]=[randmap[j],randmap[numi]]
//console.log("numi:",numi,"j:",j)
}
//測試輸出
randmap.forEach(function(item,index,array){
console.log("[",index,"]=",item);
});
數字部分還沒完成
//把地雷周圍更改數字
//randmap 1d轉2d boommap
for(let i=0; i<mapsize; i++){
boommap.push(randmap.splice(0,3));
}
console.log(boommap);
藍框是有變動地方
紅框是地雷
以前分不清它和var
區別,
現在才知道原來let
是區域變數,
而var
是全域變數。
參考:MDN let
迴圈變數懶得取名會用i,j,k,
但是有時候到z都還不夠用。
這時侯用let
,
就可以全部用i取名,
還不用擔心會汙染到下一個迴圈。
感謝撥冗閱讀,
有錯誤地方請多指教。